package com.accelstack.cmp.service;

import com.accelstack.cmp.entity.ImageTemplate;
import com.accelstack.cmp.repository.ImageTemplateRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

/**
 * 镜像模板服务
 */
@Service
@RequiredArgsConstructor
@Slf4j
@Transactional(readOnly = true)
public class ImageTemplateService {

    private final ImageTemplateRepository imageTemplateRepository;

    /**
     * 创建镜像模板
     * @param imageTemplate 待创建的镜像模板实体
     * @return 创建后的镜像模板实体
     */
    @Transactional
    public ImageTemplate create(ImageTemplate imageTemplate) {
        log.info("创建镜像模板: {}", imageTemplate.getName());
        return imageTemplateRepository.save(imageTemplate);
    }

    /**
     * 更新镜像模板
     * @param id 镜像模板ID
     * @param updatedImageTemplate 包含更新信息的镜像模板实体
     * @return 更新后的镜像模板实体，如果不存在则返回Optional.empty()
     */
    @Transactional
    public Optional<ImageTemplate> update(Long id, ImageTemplate updatedImageTemplate) {
        log.info("更新镜像模板: ID={}, 名称={}", id, updatedImageTemplate.getName());
        return imageTemplateRepository.findById(id)
                .map(imageTemplate -> {
                    imageTemplate.setName(updatedImageTemplate.getName());
                    imageTemplate.setDescription(updatedImageTemplate.getDescription());
                    imageTemplate.setBaseImage(updatedImageTemplate.getBaseImage());
                    imageTemplate.setContainerType(updatedImageTemplate.getContainerType());
                    imageTemplate.setIsPublic(updatedImageTemplate.getIsPublic());
                    imageTemplate.setStatus(updatedImageTemplate.getStatus());
                    imageTemplate.setCreatedBy(updatedImageTemplate.getCreatedBy());
                    return imageTemplateRepository.save(imageTemplate);
                });
    }

    /**
     * 根据ID删除镜像模板
     * @param id 镜像模板ID
     */
    @Transactional
    public void deleteById(Long id) {
        log.info("删除镜像模板: ID={}", id);
        imageTemplateRepository.deleteById(id);
    }

    /**
     * 根据ID查询镜像模板
     * @param id 镜像模板ID
     * @return 匹配的镜像模板实体
     */
    public Optional<ImageTemplate> findById(Long id) {
        log.debug("查询镜像模板: ID={}", id);
        return imageTemplateRepository.findById(id);
    }

    /**
     * 查询所有镜像模板（支持分页）
     * @param pageable 分页信息
     * @return 镜像模板分页列表
     */
    public Page<ImageTemplate> findAll(Pageable pageable) {
        log.debug("查询所有镜像模板 - 页码: {}, 大小: {}", pageable.getPageNumber(), pageable.getPageSize());
        return imageTemplateRepository.findAll(pageable);
    }

    /**
     * 查询所有镜像模板
     * @return 所有镜像模板列表
     */
    public List<ImageTemplate> findAll() {
        log.debug("查询所有镜像模板");
        return imageTemplateRepository.findAll();
    }
}

